package com.me.mysqladmin.util;

import java.beans.PropertyDescriptor;
import java.util.Collection;
import java.util.Map;

import com.me.mysqladmin.util.BeanUtil;

/**
 * 空值校验的工具类
 * 空值：null或空字符串
 */
public class NullUtil {
	/**
	 * 判断多个对象中是否存在null值
	 * @param params
	 */
	public static boolean existNull(Object... params) {
		boolean flag = false;
		for(Object obj : params){
			if(isNull(obj, false)){
				flag = true;
				break;
			}
		}
		return flag;
	}
	
	/**
	 * 非空判断：Bean对象不为空值，且指定bean属性的值不为空值
	 * @param obj 一个JavaBean对象
	 * @param property Bean属性名
	 */
	public static boolean isNull(Object bean, String... properties) {
		if(isNull(bean)){
			return true;
		}
		for(String prop : properties){
			if(BeanUtil.containsProp(bean, prop)){	//若该bean包含指定属性
				try {
					PropertyDescriptor pd = new PropertyDescriptor(prop, bean.getClass());
					if(isNull(pd.getReadMethod().invoke(bean))){
						return true;
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return false;
	}
	
	/**
	 * 非空判断，空字符串也算空值
	 * @param obj 任意对象
	 */
	public static boolean isNull(Object obj){
		if(obj == null){
			return true;
		}
		if(obj instanceof String){
			String str = (String) obj;
			if("".equals(str)){
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 非空判断，动态判断是否检查空字符串、
	 * @param checkEmptyStr 是否包含空字符串
	 */
	public static boolean isNull(Object obj, boolean checkEmptyStr){
		if(checkEmptyStr){
			return isNull(obj);
		}
		return obj == null;
	}
	
	/**
	 * 判断集合是否为空
	 * @param list
	 */
	public static boolean isEmpty(Collection<?> collection){
		return isNull(collection) || collection.isEmpty();
	}
	
	/**
	 * 判断Map集合是否为空
	 * @param map
	 */
	public static boolean isEmpty(Map<?, ?> map){
		return isNull(map) || map.isEmpty();
	}
}
